Background and Relevant Art
Computers and computing systems have affected nearly every aspect of modern living. Computers are generally involved in work, recreation, healthcare, transportation, entertainment, household management, etc.
Further, computing system functionality can be enhanced by a computing system's ability to be interconnected to other computing systems via network connections. Network connections may include, but are not limited to, connections via wired or wireless Ethernet, cellular connections, or even computer to computer connections through serial, parallel, USB, or other connections. The connections allow a computing system to access services at other computing systems and to quickly and efficiently receive application data from other computing system.
Interconnection of computing systems has allowed for so called cloud computing. In this description and the following claims, “cloud computing” is defined as a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be provisioned and released with reduced management effort or service provider interaction. A cloud model can be composed of various characteristics (e.g., on-demand self-service, broad network access, resource pooling, rapid elasticity, measured service, etc.), service models (e.g., Software as a Service (“SaaS”), Platform as a Service (“PaaS”), Infrastructure as a Service (“IaaS”), and deployment models (e.g., private cloud, community cloud, public cloud, hybrid cloud, etc.).
Generally in computing, executing work based on time (i.e. according to a predetermined schedule) is a common need. It may be desirable to perform so called “task scheduling”. Often this is complemented by the need of running this work in a periodic manner. Examples of scenarios where this capability is needed include periodic cleanup of data, polling a third party service to push notifications, aggregating data at the end of a business day, periodically monitoring the state of a service, pinging a service to keep it alive, and eager refreshing of a cache.
There are multiple ways of performing these actions. One such way includes a pure brute force method, such as having an application running forever checking the time and executing the work. However, in remote based systems, such as so-called cloud based systems, this can be very expensive to customers as generally customers rent system resources and having a processor dedicated to performing actions that have been pre-scheduled can be expensive. For example, in cloud based system customers may have to create a service that is constantly running checking the time and executes work accordingly when it reaches the target time based on configuration or data hardcoded in the code of the service. These polling based approaches have several drawbacks, both technical and economic: on the technical side, if the polling process dies then the target work may be never executed. For example, hardware failures may cause a polling process to die. Cloud based systems run on commodity hardware, and as such, hardware failures are fairly common. Adding reliability increases considerably the complexity of the solution. On the economic side, having a service constantly running to monitor for pre-scheduled actions, even when there is no work to run, is costly. For example, imagine if work is scheduled to be executed every 3 days, but the system polls for work every 2 minutes. Assuming that the scheduling challenge is solved, there is still another part to this problem: performing the actual work.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.